package com.tfjybj.itoo.teach.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.teach.entity.RoomEntity;
import com.tfjybj.itoo.teach.model.RoomModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * RoomDao接口
 * room表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
@Repository("roomDao")
public interface RoomDao extends BaseMapper<RoomEntity> {
	
	//region 模板生成：模糊查询
	/**
     * 根据房间代码模糊查询room
     *
     * @param code  房间代码
     * @return 模糊查询的room集合
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<RoomEntity> queryLikeCode(@Param("code") String code);
	//endregion

    /* **********************************以下为非模板生成的内容********************************* */
    /**
     * 根据建筑物ID查询所有可用的房间
     * @param buildingId
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-16 19:34:10
     */
    List<RoomModel> queryRoomByBuildingId(@Param("buildingId") String buildingId);

    /**
     * 根据最新十条房间信息
     * @param
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-18 19:34:10
     */
    List<RoomModel> queryNew10Rooms();

    /**
     * 根据Room名称Room类型模糊查询Room信息
     * @param roomName  房间名称
     * @param roomType  房间类型
     * @return roomModel
     * @author 段恩刚
     * @since 2.0.0 2018-11- 20 19:34:10
     */
    List<RoomModel> queryRoomsLikeNameOrType(@Param("roomName") String roomName, @Param("roomType") String roomType);

    /**
     * 查询所有的房间信息
     * @param
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-18 19:34:10
     */
    List<RoomModel> queryAllRooms();

    /**
     * 根据roomCode
     * @param roomCode
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-16 19:34:10
     */
    List<RoomModel> queryRoomByCode(@Param("roomCode") String roomCode);

    /**
     * 根据Room类型查询Room信息
     * @param roomType  房间类型
     * @return <roomModel>list</roomModel>
     * @author 段恩刚
     * @since 2.0.0 2018-11- 27 19:34:10
     */
    List<RoomModel> queryRoomsbyType(@Param("roomType") String roomType);
    /**
     * 根据RoomId集合查询Room信息
     * @param roomIds 房间类型
     * @return <roomModel>list</roomModel>
     * @author 段恩刚
     * @since 2.0.0 2018-11- 27 19:34:10
     */
    List<RoomModel> queryRoomsbyIds(@Param("roomIds") List<String> roomIds);

    /**
     * 根据房间code和房间名称判断建筑是否已经存在
     * @param roomCode 房间code
     * @param roomName 房间名称
     * @return 建筑id
     * @author 段恩刚
     * @since 2.0.0 2018/11/27 19:19
     */
    String findIdIsExist(@Param("roomName") String roomName, @Param("roomCode") String roomCode);

    /**
     * 根据房间名称模糊查询房间信息
     * @param roomName  建筑名称
     * @return roomModel
     * @author 段恩刚
     * @since 2018年12月15日19:44:31
     */
    List<RoomModel> queryRoomsByLikeName(@Param("roomName") String roomName);

    /**
     * 根据房间名称和建筑Id分页模糊查询房间信息
     * @param roomName  房间名称
     * @param buildingId
     * @return roomModel
     * @author 段恩刚
     * @since 2018年12月15日19:44:31
     */
    List<RoomModel> queryRoomsByLikeNameAndBuildingId(@Param("roomName") String roomName, @Param("buildingId") String buildingId);

    /**
     * 根据建筑代码查询room信息
     *
     * @param buildingId 建筑代码
     * @return 查询的room信息集合
     * @author 杨江涛
     * @since 2.0.0 2018-11-22 10:35:56
     */
    List<RoomEntity> findByBuildingId(@Param("buildingId") String buildingId);

    /**
     * 根据roomId查找Room表所有信息
     *
     * @param roomId 主键roomId
     * @return roomEntityList
     * @author 杨江涛
     * @since 2.0.0 2018-11-15 10:35:56
     */
    List<RoomEntity> findByRoomId(String roomId);

    /**
     * 根据校区代码查找Room表所有校区所有建筑的所有机房（返回list）
     *
     * @param buildingId 建筑id
     * @return roomEntityList
     * @author 杨江涛
     * @since 2.0.0 2018-11-30 16:47:29
     */
    List<RoomEntity> findComputerRoom(Object buildingId);

    /**
     * 根据roomId查找Room表所有信息
     *
     * @param searchInfo 查询参数
     * @return roomEntityList
     * @author 杨江涛
     * @since 2.0.0 2018-12-6 19:17:44
     */
    List<RoomEntity> findRoom(@Param("searchInfo") String searchInfo);

    /**
     * 根据校区号和开考时间筛选教师
     *
     * @param buildingId 校区号
     * @param startTime  配置考试开始时间
     * @return List<RoomEntity>
     * @author 马莹
     * @since 2018-12-7 20:53:31
     */
    List<RoomEntity> queryNoExamRoom(@Param("buildingId") Object buildingId, @Param("startTime") String startTime);

    /**
     * 根据东西校区以及考试开始时间加载考场
     *
     * @param schoolKey 校区key
     * @param startTime 考试开始时间
     * @param endTime   考试结束时间
     * @return 考场集合
     * @since 2019-3-24 17:33:12
     */
    //todo 根据东西校区查询考场--模糊查询
    List<RoomModel> selNotRoom(@Param("fuzzyValue") String fuzzyValue, @Param("schoolKey") String schoolKey, @Param("startTime") String startTime, @Param("endTime") String endTime);
}
